package info.helper;

/**
 * Helper Klasse für alles was mit Sortierungen zu tun hat
 * @author Martin
 */
public class MSort {

    public static int[] selectionSort(int[] unsorted) {
        int kleinstes;
        int platz;
        int[] sortiert = unsorted;
        int anzahl=sortiert.length;

        for (int aktuell = 0; aktuell < (anzahl - 1); aktuell++) {
            platz = aktuell;
            kleinstes = sortiert[aktuell];
            for (int j = aktuell + 1; j < anzahl; j++) {
                if (sortiert[j] < kleinstes) {
                    kleinstes = sortiert[j];
                    platz = j;
                }
            }
            if (platz > aktuell) {
                sortiert[platz] = sortiert[aktuell];
                sortiert[aktuell] = kleinstes;
            }

        }
        return sortiert;

    }
    
    public static int[] quickSort(int[] liste) {
        int untereGrenze = 0;
        int obereGrenze = liste.length - 1;
        return quickSort(liste, untereGrenze, obereGrenze);
    }

    private static int[] quickSort(int[] liste, int untereGrenze, int obereGrenze) {
        int links = untereGrenze;
        int rechts = obereGrenze;
        int pivot = liste[((untereGrenze + obereGrenze) / 2)];
        do {
            while (liste[links] < pivot) {
                links++;
            }
            while (pivot < liste[rechts]) {
                rechts--;
            }
            if (links <= rechts) {
                int tmp = liste[links];
                liste[links] = liste[rechts];
                liste[rechts] = tmp;
                links++;
                rechts--;
            }
        } while (links <= rechts);
        if (untereGrenze < rechts) {
            liste = quickSort(liste, untereGrenze, rechts);
        }
        if (links < obereGrenze) {
            liste = quickSort(liste, links, obereGrenze);
        }
        return liste;
    }
    
}
